package client;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Calendar;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

import DTO.AnnonceDTO;
import DTO.VendeurDTO;

/**
 * Classe décrivant la fenêtre "Modifier une annonce".
 * 
 * @author Julien Dubois
 * @version 1.0 (Mai 2012).
 *
 */
@SuppressWarnings("serial")
public class ClientAnnonceModifierAnnonce extends JFrame implements ActionListener, WindowListener
{
	
	//DECLARATION DES VARIABLES DE LA CLASSE 
	
	/**
	 * Panel général de fond.
	 */
	private JPanel panel_de_fond;
	
	/**
	 * Panel principal contenant nos éléments
	 */
	private JPanel panel;
	
	/**
	 * Layouts choisis pour agencer nos éléments.
	 */
	private BorderLayout borderLayoutPrincipal;
	private FlowLayout flowLayout;	
	
	/**
	 * Boutons de la fenêtres.
	 */
	private JButton btnRetour, btnSauvegarder ;

	/**
	 * Instance de l'annonce modifiée.
	 */
	private AnnonceDTO annonceModif ; 
	
	/**
	 * ID's des objets courants manipulés. 
	 */
	private int idVendeur, idAnnonce ;

	/**
	 * TextArea's de la fenêtre.
	 */
	private  JTextArea jtaTitre, jtaCorps, jtaDept;
	
	/**
	 * String département.
	 */
	private String departement ;
	
	/**
	 * Boolean's de la fenêtre.
	 */
	private boolean emploisStages;
	private boolean objetServices;
	
	/**
	 * Message "Annonce sauvegardée !".
	 */
	private JLabel annonceSauvegardee ;
	private boolean quitter = true;
	
	
	
	
	// CONSTRUCTEUR DE LA FENETRE
	
	public ClientAnnonceModifierAnnonce()
	{
		/*
		 * Va nous pemettre d'utiliser this.dispose pour disposer d'un fenêtre quand on en a plus besoin (pour la fermer)
		 */
		this.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent arg0)
			{
				if(quitter)
				{
					ClientCommunication.getInstance().fermerConnexion();
					System.err.println("mdr de lol");
				}
			}
		});
		
		
		//on récupère les informations concernant l'annonce.
		idVendeur = ClientCommunication.getInstance().getAnnonceStocke().getId_vendeur();
		idAnnonce =  ClientCommunication.getInstance().getAnnonceStocke().getId();
		departement = ClientCommunication.getInstance().getAnnonceStocke().getDepartement();
		emploisStages = ClientCommunication.getInstance().getAnnonceStocke().isEmploi_stage();
		objetServices = ClientCommunication.getInstance().getAnnonceStocke().isObjet_service();
		

		this.setTitle("Petites Annonces - Détails");
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setVisible(true);

		//on définit la taille de la fenêtre
		//600x660 pour respecter au mieux la taille de l'image d'accueil.
		this.setSize(600,660);
		
		
		//On n'empêche le redimensionnement.
		this.setResizable(false);
		
		
		//On colore le panel dans un gris sympathique et soyeux.
		panel_de_fond = new JPanel();
		panel_de_fond.setBackground(Color.LIGHT_GRAY);
		this.setContentPane(panel_de_fond);
		
		
		//BorderLayout pour agencer nos éléments.
		borderLayoutPrincipal = new BorderLayout();
		this.setLayout(borderLayoutPrincipal);
		
		
				
		//PERSONNALISATION DE LA FENETRE A PARTIR DICI 
		
		//FlowLayout pour agencer nos éléments.
		flowLayout = new FlowLayout();
		
		
		//Association Layout <-> Panel + CENTER + couleur.
		panel = new JPanel();
		panel.setLayout(flowLayout);
		this.getContentPane().add(panel, BorderLayout.CENTER);
		panel.setBackground(Color.LIGHT_GRAY);		
		
		
		//Retour chariot (on va à la ligne).
		JLabel espacevide0 = new JLabel();
		espacevide0.setPreferredSize(new Dimension(285, 30));
		panel.add(espacevide0);
		
		
		//Paramétrage premier TextArea.
		jtaTitre = new JTextArea(ClientCommunication.getInstance().getAnnonceStocke().getTitre());
		jtaTitre.setPreferredSize(new Dimension(300, 60));
		jtaTitre.setBackground(Color.white);
		jtaTitre.setEditable(true);
		panel.add(jtaTitre);
		
		
		//Espace pour agencer nos éléments.
		JLabel espacevide1 = new JLabel();
		espacevide1.setPreferredSize(new Dimension(490, 30));
		panel.add(espacevide1);
		
		
		//on stocke l'ID du vendeur corresponant à l'annonce.
		int idVendeurAnnnonce = ClientCommunication.getInstance().getAnnonceStocke().getId_vendeur();
		//on recupere le vendeur correspondant à cet ID.
		VendeurDTO vendeurAnnonce = ClientCommunication.getInstance().recupererVendeur(idVendeurAnnnonce);
		
		
		//on affiche le nom du vendeur courant.
		JTextArea jlNomEmmetteur = new JTextArea(vendeurAnnonce.getNom());
		jlNomEmmetteur.setPreferredSize(new Dimension(100, 30));
		jlNomEmmetteur.setFocusable(false);
		jlNomEmmetteur.setBackground(Color.LIGHT_GRAY);
		panel.add(jlNomEmmetteur);
		
		
		//espace entre le prenom et le nom
		JLabel espacevide2 = new JLabel();
		espacevide2.setPreferredSize(new Dimension(50, 30));
		panel.add(espacevide2);
		
		
		//on affihe le prenom du vendeur courant.
		JTextArea jtaPrenomEmetteur = new JTextArea(vendeurAnnonce.getPrenom());
		jtaPrenomEmetteur.setPreferredSize(new Dimension(100, 30));
		jtaPrenomEmetteur.setFocusable(false);
		jtaPrenomEmetteur.setBackground(Color.LIGHT_GRAY);
		panel.add(jtaPrenomEmetteur);
		
		
		//Retour chariot (on va à la ligne).
		JLabel espacevide3 = new JLabel();
		espacevide3.setPreferredSize(new Dimension(250, 30));
		panel.add(espacevide3);
		
		
		//Numero de téléphone du vendeur courant.
		JTextArea jtaTelephone = new JTextArea(vendeurAnnonce.getTelephone());
		jtaTelephone.setPreferredSize(new Dimension(100, 30));
		jtaTelephone.setFocusable(false);
		jtaTelephone.setBackground(Color.LIGHT_GRAY);
		panel.add(jtaTelephone);
		
		
		//Espace entre le téléphone et l'email.
		JLabel espacevide4 = new JLabel();
		espacevide4.setPreferredSize(new Dimension(50, 30));
		panel.add(espacevide4);
		
		
		//Email du vendeur courant. 
		JTextArea jtaEmail = new JTextArea(vendeurAnnonce.getEmail());
		jtaEmail.setPreferredSize(new Dimension(100, 30));
		jtaEmail.setFocusable(false);
		jtaEmail.setBackground(Color.LIGHT_GRAY);
		panel.add(jtaEmail);
		
		
		//Retour chariot (on va à la ligne).
		JLabel espacevide5 = new JLabel();
		espacevide5.setPreferredSize(new Dimension(250, 30));
		panel.add(espacevide5);
		
		
		//En fonction du type de l'annonce courante on set un String "type". 
		String type = "";
		boolean emploi = ClientCommunication.getInstance().getAnnonceStocke().isEmploi_stage();
		if (emploi == true)
		{
			type = "Offres d'Emplois/Stages";
		}
		else
		{
			type = "Ventes Objets/Services" ;
		}
		
		
		//On affiche le type de l'annonce courante.
		JTextArea jtaType = new JTextArea();
		jtaType.setText(type);
		jtaType.setPreferredSize(new Dimension(300, 30));
		jtaType.setFocusable(false);
		jtaType.setBackground(Color.LIGHT_GRAY);
		panel.add(jtaType);
		
		
		//Retour chariot (on va à la ligne).
		JLabel espacevide6 = new JLabel();
		espacevide6.setPreferredSize(new Dimension(210, 30));
		panel.add(espacevide6);
		
		
		//Département de l'annonce courante.
		String dept = ClientCommunication.getInstance().getAnnonceStocke().getDepartement();
		jtaDept = new JTextArea();
		jtaDept.setText("Département : " + dept);
		jtaDept.setPreferredSize(new Dimension(100, 20));
		jtaDept.setFocusable(false);
		jtaDept.setBackground(Color.LIGHT_GRAY);
		panel.add(jtaDept);
		
		
		//Retour chariot (on va à la ligne).
		JLabel espacevide7 = new JLabel();
		espacevide7.setPreferredSize(new Dimension(410, 30));
		panel.add(espacevide7);
		
		
		//Corps de l'annonce.
		String corps = ClientCommunication.getInstance().getAnnonceStocke().getContenu();
		jtaCorps = new JTextArea();
		jtaCorps.setPreferredSize(new Dimension(500, 250));
		jtaCorps.setLineWrap(true);
		jtaCorps.setBackground(Color.white);
		jtaCorps.setText(corps) ;
		jtaCorps.setEditable(true);
		panel.add(jtaCorps);
		
		
		//Retour chariot (on va à la ligne).
		JLabel espacevide8 = new JLabel();
		espacevide8.setPreferredSize(new Dimension(90, 30));
		panel.add(espacevide8);
		
		
		//Label : "Annonce sauvegardée !"
		annonceSauvegardee = new JLabel();
		annonceSauvegardee.setText("Annonce sauvegardée !");
		annonceSauvegardee.setForeground(Color.LIGHT_GRAY);
		panel.add(annonceSauvegardee);
		
		//Espace vide pour l'agencement.
		JLabel espacevide9 = new JLabel();
		espacevide9.setPreferredSize(new Dimension(50, 30));
		panel.add(espacevide9);
		
		
		//Bouton "Retour à l'accueil".
		btnRetour = new JButton("Retour à l'accueil") ;
		panel.add(btnRetour);
		btnRetour.addActionListener(this);
		
		
		//Bouton "Sauvegarder".
		btnSauvegarder = new JButton("Sauvegarder");
		panel.add(btnSauvegarder);
		btnSauvegarder.addActionListener(this);
		
		//Espace vide pour l'agencement.
		JLabel espacevide10 = new JLabel();
		espacevide10.setPreferredSize(new Dimension(30, 30));
		panel.add(espacevide10);
	}
	
	
	// ACTIONS SUR LES BOUTONS

	public void actionPerformed(ActionEvent e)
	{
		Object event = e.getSource();
		
		//Clique sur le bouton Retour.
		if (event == btnRetour)
		{
			quitter = false;
			ClientCommunication.getInstance().creerFenetre(panel, "fenetreUneFoisConnecte");
			this.dispose();
		}
		
		//on génère la date du jour auformat SQL.
		Calendar cal = Calendar.getInstance();
		java.sql.Date date = 
			       new java.sql.Date( cal.getTime().getTime() );
		
	
		//Clique sur le bouton Sauvegarder.
		if (event == btnSauvegarder)
		{
			// On va vérifier que les informations saisies soient bonnes
			if(ClientCommunication.verifierDepartement(jtaDept.getText()))
			{
				if(ClientCommunication.verifierTitre(jtaTitre.getText()))
				{	
					// Si tout est bon, on peut modifier l'annonce
					
					//on store la nouvelle AnnonceDTO dans annonceModif.
					annonceModif = new AnnonceDTO(idAnnonce, idVendeur, date, jtaTitre.getText(),
					jtaCorps.getText(), departement, emploisStages, objetServices);
					
					//affichage du message de sauvegarde en rouge.
					ClientCommunication.getInstance().modifierAnnonce(idAnnonce, annonceModif);
					annonceSauvegardee.setForeground(Color.red);
				}
				else
				{
					annonceSauvegardee.setText("Le titre est trop long.");
					annonceSauvegardee.setForeground(Color.red);
				}
			}
			else
			{
				annonceSauvegardee.setText("Le département saisi est mauvais.");
				annonceSauvegardee.setForeground(Color.red);
			}
			
			quitter = false;
		}
	}


	
	//Méthodes implémentées de WindowListener, on ne les utilisent pas.
	
	@Override
	public void windowActivated(WindowEvent e)
	{
		
	}


	@Override
	public void windowClosed(WindowEvent e)
	{
		
	}


	@Override
	public void windowClosing(WindowEvent e)
	{
		
	}


	@Override
	public void windowDeactivated(WindowEvent e)
	{
		
	}


	@Override
	public void windowDeiconified(WindowEvent e)
	{
		
	}


	@Override
	public void windowIconified(WindowEvent e)
	{
		
	}


	@Override
	public void windowOpened(WindowEvent e)
	{
		
	}
}
